import Vue from 'vue'
import Router from 'vue-router'
/**
 * 重写路由的push方法
 */
const routerReplace = Router.prototype.replace
Router.prototype.replace = function replace(location) {
  return routerReplace.call(this, location).catch(error=> error)
}
Vue.use(Router)

/* Layout */
import Layout from '@/layout'
import baspRouter from './modules/basp'
/**
 * hidden: true                   如果设置为true,路由对应项将不会在左侧菜单展示(默认是false)
 * redirect: noRedirect           设置重定向地址,如果是根目录不对应可视页面的时候一定要设置为其子目录中的某一个页面绝对地址
 * name:'router-name'             路由名字在<keep-alive>中会被使用 (必须设置，且不能重复)
 * meta : {
    title: 'title'               左侧菜单栏和面包屑，tab标签页中的名字 (如果有对应的页面那么必填)
    code: 'code'               	  跟后台接口返回的菜单列表中的moduleCode要匹配，才能按照权限显示菜单 
    icon: 'svg-name'             菜单栏的图标
    noCache: true                如果设置为true，页面将不会缓存(默认是false)
    affix: true                  如果设置为true,将会一直显示在tags-view
    breadcrumb: false            如果设置为false, 该项将不会出现在 面包屑(默认是true)
    activeMenu: '/example/list'  如果设置了路径, 菜单栏将会 高亮该项路由层级对应的菜单项(一般用于由某个（如列表）页面的超链接打开某个（如新增或者编辑）页面，该页面不在左侧边的菜单栏，这时候需要高亮显示前一个（列表页面）菜单)
    parentPathName: '/test1/test2'  当有二级及以上router-view层级时候，需要设置当前页面的上面多级目录的回溯路径一直到Layout根组件下一层
  }
 */

/**
 * constantRoutes
 * 基础无权限可任意访问的页面路由配置
 */
export const constantRoutes = [
	{
		path: '/redirect',
		component: Layout,
		hidden: true,
		children: [
			{
			path: '/redirect/:path*',
			component: () => import('@/views/redirect/index')
			}
		]
	},
	{
		path: '/',
		component: Layout,
		hidden: true,
		redirect: '/home',
		children: [{
			path: 'home',
			component: () =>import('@/views/home/index'),
			name: 'home',
			meta: {
				title: '主页',
				icon: 'dashboard',
				code: 'home',
				affix: true   //是否永远不关闭
			}
		}]
	},
	{
		path: '/test',
		component: Layout,
		redirect: '/test/test1/test1-page1',
		name: 'test',
		meta: {
			title: '测试模块',
			icon: '404'
		},
		children: [{
			path: 'test1',
			component: () => import('@/views/test/test1'),
			redirect: '/test/test1/test1-page1',
			name: 'test1',
			meta: { title: '测试1',icon: '404'},
			children:[{
				path: 'test1-page1',
				component: () => import('@/views/test/test1/page1'),
				name: 'test1-page1',
				meta: { title: '测试1-页面1',parentPathName:'/test1'},
			},{
				path: 'test1-page2',
				component: () => import('@/views/test/test1/page2'),
				name: 'test1-page2',
				meta: { title: '测试1-页面2',parentPathName:'/test1'},
			}]
		}]
    },
]
/**
 * asyncRoutes
 * 需要根据后台返回的菜单列表权限而访问的路由页面配置
 */
export const asyncRoutes = [
    baspRouter.baspSystemManageRouter,
	baspRouter.baspAcountManageRouter,
	baspRouter.backstageManageRouter
]

const createRouter = () => new Router({
	// mode: 'history', // require service support
	scrollBehavior: () => ({
		y: 0
	}),
	routes: constantRoutes
})

const router = createRouter()

export function resetRouter() {
	const newRouter = createRouter()
	router.matcher = newRouter.matcher // reset router
}

export default router